#ifndef __CTaskList_H__
#define __CTaskList_H__

#include "thread/ITask.h"
#include "thread/ITaskList.h"

namespace irr {
namespace thread {

class CTaskList:public virtual ITaskList{
private:
	irr::core::array<ITask*> tasks;
public:
	CTaskList();
	virtual ~CTaskList();
	
	/***
	* Добовляет заданиие в список выполнения, увеличивая счётчик ссылки объекту задания
	*
	* Пример:
	* ...код...
	* myTask*mt=new myTask();//Создаём задачу
	* myTaskList->addTask(mt);//Отдаём задачу списку задач
	* mt->drop();//"говорим", что нам эта задача больне не нужна
	* ...код...
	*
	* @param task экземпляр класса задания
	*/
	virtual void addTask(ITask*task);

	/***
	* Добовляет заданиие в список выполнения, при этом счётчик остаётся равный еденице.
	* Что задача будет создана и сразу же отдана списку задач, не думая об уничтожении
	* одной ссылки на задачу. Подразумивается что созданная задача нам больне не нужна
	* т.е. нужна она только списку задач.
	*
	* Пример:
	* ...код...
	* myTaskList->giveTask(new MyTask());//Создаём задачу и сразу же отдаём её списку задач. Подразумивается, что задача нам больне не нужна
	* ...код...
	*
	* @param task экземпляр класса задания
	*/
	virtual void giveTask(ITask*task);

	/***
	* Выполняет все поставленные задания в том потоке из которого метод был вызван
	**/
	virtual void run();
	
	/***
	* Возвращяет количество заданий
	*
	* @return количество поставленных заданий
	**/
	virtual irr::u32 getTaskCount();
};

}//namespace irr;
}//namespace thread;

#endif
